package controlador;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.*;
import vista.frmOrdenCompra;
import modelo.CategoriaDao;
import modelo.Categoria;
import modelo.ProductoDao;
import modelo.Producto;
import modelo.OrdenCompra;
import modelo.OrdenCompraDao;
import modelo.DetalleOrdenCompra;
import modelo.DetalleOrdenCompraDao;
import modelo.IngredienteDao;
import modelo.Ingrediente;
import modelo.RecetaDao;
import modelo.Receta;
public class controladorOrdenCompra implements ActionListener{	  
		private frmOrdenCompra frmorden;
		private double acumulador=0;
		OrdenCompra orden=new OrdenCompra();
		OrdenCompraDao ordencompradao=new OrdenCompraDao();
		public CategoriaDao categoriadao=new CategoriaDao();
		public ProductoDao productodao=new ProductoDao();
		public controladorOrdenCompra() {
			super();
			this.frmorden = new frmOrdenCompra();
			this.frmorden.setLocation(480,210);
			this.frmorden.setVisible(true);	
			this.frmorden.addListener(this);		
			frmorden.CargarComboCategoria(categoriadao.CargarCombo());
			frmorden.CargarComboProducto(productodao.CargarCombo(frmorden.getcategoria()));
		    orden=ordencompradao.getOrdenCompra();
		    frmorden.setcodigoorden(orden.getCodigoorden());
		}
		@Override
		public void actionPerformed(ActionEvent e) {
			String actionCommand = e.getActionCommand();
			String cate=frmorden.getcategoria();
		    frmorden.CargarComboProducto(productodao.CargarCombo(cate));
			if (actionCommand.equals("Guardar")) {
				RegistrarOrdenCompra();		}	
			else if (actionCommand.equals("Cancelar")) {
				frmorden.borrarDatos();
				frmorden.getmodelo().Limpiar();
			}else if(actionCommand.equals("Salir"))
			{
				this.frmorden.dispose();
			}else if(actionCommand.equals("Incluir"))
			{
				Incluir();
				
			}else if(actionCommand.equals("Remover"))
			{
				acumulador=acumulador-Double.parseDouble(String.valueOf(frmorden.getmodelo().getValueAt(frmorden.Posicion(), 5)));
				frmorden.setTotal(acumulador);
				frmorden.getmodelo().Remover(frmorden.Posicion());
			}
		}

		
		private void Incluir()
		{
			Categoria categoria=new Categoria();
		
			Producto producto=new Producto();
			producto=productodao.getProducto(frmorden.getnombreproducto());
			categoria =categoriadao.getCategoria(frmorden.getcategoria());
			acumulador=acumulador+Double.parseDouble(frmorden.getcantidad())*producto.getPrecio();
			frmorden.setTotal(acumulador);
			frmorden.getmodelo().incluir(producto.getCodigoproducto(), categoria.getNombrecategoria(), producto.getNombreproducto(),frmorden.getcantidad() , String.valueOf(producto.getPrecio()), String.valueOf(producto.getPrecio()*Double.parseDouble(frmorden.getcantidad())));
            
	}
		private void RegistrarOrdenCompra(){
		  	try
			{
		    	if(frmorden.getcedula().equals("")|| 
		    			frmorden.getnombrecliente().equals("") || 
		    			frmorden.gettotal().equals("")||frmorden.getmodelo().getRowCount()==0)
		                frmorden.mostrarMensaje("Debe llenar todos los datos para poder procesar la orden del producto");
		    	else
		    	{

		    		RecetaDao recetadao=new RecetaDao();
		    		IngredienteDao ingredientedao=new IngredienteDao();
		    	    DetalleOrdenCompraDao detalleordencompradao=new DetalleOrdenCompraDao();
		    	    OrdenCompra ordencompra= new OrdenCompra(frmorden.getcodigoorden()+"1", frmorden.getnombrecliente(), frmorden.getcedula(),0,Double.parseDouble(frmorden.gettotal()));		    
			        ordencompradao.RegistrarOrden(ordencompra);
			        int i=frmorden.getmodelo().getRowCount();
			       Vector<Receta> vreceta=new Vector<Receta>();
			        for(int j=0; j<i;j++)
			        {
			        	DetalleOrdenCompra detalleordencompra=new DetalleOrdenCompra(String.valueOf(frmorden.getmodelo().getValueAt(j,0)),frmorden.getcodigoorden(),"D"+frmorden.getcodigoorden(),Double.parseDouble(String.valueOf(frmorden.getmodelo().getValueAt(j,3))), Double.parseDouble(String.valueOf(frmorden.getmodelo().getValueAt(j,5))));
			        	vreceta=recetadao.getReceta(detalleordencompra.getCodigoproducto());
			        	ingredientedao.ActualizarExistencia(vreceta);
			        	detalleordencompradao.RegistrarDetalleOrden(detalleordencompra);
			        }
			        frmorden.mostrarMensaje("La Orden de Compra fue registrado con exito");
			    	frmorden.borrarDatos();
		    	}
			}catch(Exception e)
			{
				frmorden.mostrarMensaje("No se pudo registrar la categoria, verifique que los datos sean correctos");
			  	frmorden.borrarDatos();
			}
		}


}

